Bonjour,
Avec une expression rationnelle (régulière ?), je cherche à filtrer un tant soit peu des adresses électroniques saisies dans un formulaire. Pour l'instant, je me base sur les RFC 5321 sections 4.1.2 and 4.1.3 + Errata :
email address = local-part@domain ou local-part@address-literal
local-part = (?:[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+(?:\.[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+)*)|(?:"[\x20-\x21\x23-\x5B\x5D-\x7E]*")|(?:"(?:\\[\x20-\x7E])*")
domain = (?:[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?)*(?:\.)?)
Pour address-literal, ça devient folklorique, j'ai laissé tomber après avoir tenté un truc pourri du style :
(?:\[([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))(?:\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))){3}\])|(?:\[IPv6:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){7}\])|(?:\[IPv6:(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,5})?::(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,5})?\])|(?:\[IPv6:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){5}:([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))(?:\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))){3}\])|(?:\[IPv6:(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,3})?::(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,3}:)?([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))(?:\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))){3}\])|(?:\[[A-Za-z0-9\-]*[A-Za-z0-9]:[\x21-\x5A\x5E-\x7E]+\])
Donc si je me cantonne à local-part@domain, ça donne :
/^((?:[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+(?:\.[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+)*)|(?:"[\x20-\x21\x23-\x5B\x5D-\x7E]*")|(?:"(?:\\[\x20-\x7E])*"))@(?:[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?)*(?:\.)?)$/
Je (…)